with deepspeed.zero.Init():
    model = MyLargeModel()
partition_parameters.Init.__enter__：
获取torch Module的所有子类的构造函数改为partition_after.wrapper, 在这里将param转成分区的deepspeed param。
修改Module.apply， apply之前gather参数
修改各种tensor类， tensor， empty, zeros, ones….
修改functional.linear
__exit__的时候去除打上的patch


无需model修改(例如Megatron-LM的张量并行， 流水线并行)
自动数据移动
不活跃时， 保持切片， 并卸载到CPU内存或者NVMe
张量需要使用的时候， 保持完整， 并加载到GPU， 之后再切片卸载
通过PyTorch module的hook机制实现
以重叠（掩盖）为中心的设计最小化通信（传输）等待， 异步多流机制。
使用NN module trace优化前向后向数据移动
初始化时的自动分区
上下文管理器修饰了torch.nn.Module.__init__， 使得MyLargeModel的submodule可以自动分区


model, optimizer, train_loader, _ = deepspeed.initialize(
    model=MyLargeModel,
    optimizer=optimizer,
    model_parameters=model.parameters(),
    training_data=train_dataset,
    config=deepspeed_config
)

DeepSpeedZeRoOffload:
setup_zero_stage3_hooks
pre_sub_module_forward_function
post_sub_module_forward_function
pre_sub_module_backward_function
post_sub_module_backward_function


DeepSpeed Inference + 模型并行
